package 压缩流;

import java.io.*;
import java.util.zip.*;
// 压缩单个文件为ZIP格式
public class ZipSingleFileExample {
    public static void main(String[] args) throws IOException {
        // 定义源文件路径
        String sourceFile = "document.txt";
        // 定义压缩文件路径
        String zipFile = "compressed.zip";

        File source = new File(sourceFile);
        if (!source.exists()) {
            source.createNewFile();
        }

        // 创建ZIP文件输出流和源文件输入流，用于将单个文件压缩为ZIP格式
        // 使用try-with-resources语句确保所有流在使用完毕后能够自动关闭
        // FileOutputStream: 用于向ZIP文件写入数据
        // ZipOutputStream: 用于创建ZIP格式的压缩输出流
        // FileInputStream: 用于读取待压缩的源文件
        try (FileOutputStream fos = new FileOutputStream(zipFile);
             ZipOutputStream zos = new ZipOutputStream(fos);
             FileInputStream fis = new FileInputStream(sourceFile)) {

            // 创建ZIP条目
            ZipEntry zipEntry = new ZipEntry(sourceFile);
            zos.putNextEntry(zipEntry);

            // 设置压缩级别 (0-9)
            zos.setLevel(Deflater.BEST_COMPRESSION);

            // 将文件内容写入ZIP
            byte[] buffer = new byte[1024];
            int length;
            while ((length = fis.read(buffer)) >= 0) {
                zos.write(buffer, 0, length);
            }

            // 关闭当前条目
            zos.closeEntry();

            System.out.println("文件压缩完成: " + zipFile);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}